﻿using EGuayas.Web.Resources;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Archivos.Pdf;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.Auditoria
{
    /// <summary>
    /// Wuc informe para auditoria de cumplimiento 
    /// </summary>
    public partial class wucInformeCorrecion : ucWuc
    {
        protected String ModuloSession
        {
            get
            {

                return ReadCustomConfig(this.pnlLoadDocu, this.ID, "_aud");
            }

        }
        protected String ValorFaseOrAuditoriaId
        {
            get
            {

                return (this.ModuloSession == Valores.Modulo_Archivo_Informes_Aud_Cump) ? GetSessionPage.GetSession(ReadCustomConfigFaseAuditoria(this.pnlLoadDocu, this.ID)) : ReadCustomConfigAuditoriaId(this.pnlLoadDocu, this.ID);
            }

        }
        
        protected String IdPageSession
        {
            get
            {
               
                return ReadCustomConfigPage(this.pnlLoadDocu, this.ID);
            }

        }
        public String ExpedienteId
        {
            get
            {
                return ReadCustomConfig(this.pnlLoadDocu, this.ID, "_AexpId");
            }
        }
        public String ExpedienteAuditoriaId
        {
            get
            {
                return ReadCustomConfigExpedienteAuditoria(this.pnlLoadDocu, this.ID);
            }
        }
        protected String CodigoEstadoFase
        {
            get
            {

                return ReadCustomConfigSessionCodigoFase(this.pnlLoadDocu, this.ID);
            }

        }
        protected String EstadoFase
        {
            get
            {

                return ReadCustomConfigEstadoFase(this.pnlLoadDocu, this.ID);
            }

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                    if (!X.IsAjaxRequest)
                    {
                        string estadoDeFase = GetSessionPage.GetSession(this.EstadoFase);
                        string codigoDeFase = GetSessionPage.GetSession(this.CodigoEstadoFase);
                        this.hdEstadoPorRev.SetValue(Valores.Codigo_Estado_Inf_PorRevizar);
                        this.hddCodigoRol.SetValue(GetSessionUsuario.UsuarioRolCodigo);
                        this.hdEstadoSubDir.SetValue(Valores.Codigo_Estado_Inf_RevSubDir);
                      
                        this.stoCbxDirector.DataSource = DirectorSubDirLista.GetDirectorSubDirLista();
                        this.stoCbxDirector.DataBind();
                        //Llenar datos de resolución exepto en categorizacion
                        this.stoEstadosFases.DataSource = EstadoFaseLista.GetEstadoFase(codigoDeFase);
                        this.stoEstadosFases.DataBind();
                        Window winNoDoc = new Window()
                        {
                            ID = "winDocVerNow",
                            Hidden = true,
                            Height = Unit.Pixel(370),
                            Width = Unit.Pixel(660),

                            Loader = new ComponentLoader
                            {

                                Mode = LoadMode.Frame,
                                Url = ConfigurationManager.AppSettings.Get("Url") + "Auditoria/admin/PgWucInforme.aspx?ModuloSession=" + ModuloSession + "&IdPageSession=" + IdPageSession + "&ValorFaseOrAuditoriaId=" + ValorFaseOrAuditoriaId + "&ExpedienteId" + ExpedienteId + "&ExpedienteAuditoriaId" + ExpedienteAuditoriaId,
                                LoadMask =
                                {
                                    ShowMask = true
                                }
                            }
                        };
                        Ext.Net.Button btnApply = new Ext.Net.Button();
                        btnApply.Text = "Cerrar";
                        btnApply.OnClientClick = "AppGlobalJs.closeWin(#{winDocVerNow})";
                        winNoDoc.Buttons.Add(btnApply);

                        this.Controls.Add(winNoDoc);
                        //DESHABILITAR MODO LECTURA
                        if (estadoDeFase == Valores.Codigo_Estado_Fase_Finalizado)
                        {
                            RemoveEndColumnGridGlobal(5, this.gpDocumentosLoad);
                        }
                    }
            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.Page_Load" + ex);
            }
        }
        /// <returns></returns>
        [DirectMethod(IDAlias = "WucLoadDoc")]
        public ArchivoLista BindData()
        {
            try{
                    ArchivoGlobalCriteria filter = ArchivoGlobalCriteria.NewArchivoGlobalCriteria();
                    //filter.ExpedienteId = ExpedienteId;// GetSessionPage.ExpedienteId(IdPageSession);
                    filter.ExpedienteId = "";
                    filter.FaseId = ValorFaseOrAuditoriaId;
                    filter.Tabla = ModuloSession;
                    return ArchivoLista.GetArchivoLista(filter);
             }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.BindData" + ex);
            }
            return null;
        }
        #region Expander Grid
        protected static void GrdInbox_Command(object sender, DirectEventArgs e)
        {
            /*
                string commandName = e.ExtraParams["command"];
                long Id = Convert.ToInt64(e.ExtraParams["Id"]);
            */
        }
        
        #endregion Expander Grid

        /// <summary>
        /// Subir archivos de promotor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void UploadClick(object sender, DirectEventArgs e)
        {
            try
            {
                //Realizar similares modificaciones wuc wucInformePmaMon.ascx
                switch (ModuloSession)
                {
                    case Valores.Modulo_Archivo_Informes_Aud_Cump:
                        var objFaseAud = FaseAuditoria.GetEditableRoot(Guid.Parse(ValorFaseOrAuditoriaId));
                        objFaseAud.EstadoDMA = e.ExtraParams["hdEstado"];
                        objFaseAud.Save();
                        break;
                    /*
                    case Valores.Modulo_Archivo_Informes_Aud_Moni:
                       
                        
                        break;
                    case Valores.Modulo_Archivo_Informes_Aud_Pma:
                        
                        break;
                    case Valores.Modulo_Archivo_Informes_Aud_Otro:
                        
                        break;
                     */ 
                }

                

                FileUploadField myCtlFileUp = (FileUploadField)this.FindControl("FileUploadDocUpInf");
                if (myCtlFileUp.HasFile)
                {
                    Boolean IfNewVer = Convert.ToBoolean(e.ExtraParams["hddnDocIfVer"]);
                    int version = 0;
                    string fileExt = myCtlFileUp.PostedFile.FileName.Substring(myCtlFileUp.PostedFile.FileName.LastIndexOf('.') + 1);
                    string ruta = "";
                    string fileName = "";
                    string fileNameTmp = "";

                    Int32.TryParse(e.ExtraParams["hddnDocUpVers"], out version);
                    this.GetNameFile(myCtlFileUp, fileExt, ref ruta, ref fileName, ref fileNameTmp);

                    //TODO:Generar User id para descriptar y encriptar                
                    //Guid guid = Guid.NewGuid();

                    byte[] USER = Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings.Get("UserPdf"));
                    byte[] OWNER = Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings.Get("PwdPdf"));

                    if (fileExt.ToLower() == "pdf")
                    {
                        myCtlFileUp.PostedFile.SaveAs(fileNameTmp);
                        Pdf.EncryptFilePdf(fileNameTmp, fileName, USER, OWNER);
                        File.Delete(fileNameTmp);
                    }
                    else
                    {
                        myCtlFileUp.PostedFile.SaveAs(fileName);
                    }
                    string tpl = Mensajes.MensajeArchivoCorrecto;

                    Archivo objArch = Archivo.NewEditableRoot(ModuloSession);
                    objArch.Id = System.Guid.NewGuid();
                    //Nuevas versiones datos correguidos
                    objArch.SubirNuevo = "C";
                    if (version == 1)
                    {
                        objArch.SubirNuevo = "N";
                        objArch.Referencia = objArch.Id.ToString();
                    }
                    else
                        if (version == 2)
                            objArch.Referencia = e.ExtraParams["hddnDocUpId"];
                        else
                            if (version > 2)
                                objArch.Referencia = e.ExtraParams["hddnDocUpRef"];
                   
                    objArch.Nombre = e.ExtraParams["txtNombre"];
                    objArch.Descripcion = e.ExtraParams["txtDesp"];
                    objArch.FechaCreacion = DateTime.Now;
                    objArch.RequiereFirmar = "N";
                    objArch.Firmado = "N";
                    objArch.TipoDocumento = "Informe";

                    objArch.Version = version;
                    objArch.RequiereFirmar = "N";

                    objArch.PersonaId = GetSessionUsuario.PersonaId;
                    objArch.GlobalRelacionId = ValorFaseOrAuditoriaId;
                    objArch.CodigoFase = GetSessionPage.GetSession(CodigoEstadoFase);
                    objArch.ExpedienteId = ExpedienteId;
                    objArch.Ruta = ruta;
                    objArch.Save();

                    //Inicialmente Tecnico sube informe con estado POR-REVIZAR
                    UpdateEstadoInfome(objArch.Id, Valores.Codigo_Estado_Inf_PorRevizar);

                    //
                    //Guardar id archivos temporalmente recien creados
                    ExtNet.Js.Call("wucJsLoadCor.AddIdsNew", objArch.Id.ToString(), objArch.Version.ToString());
                    gpDocumentosLoad.GetStore().Reload();
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = Titulos.TituloAviso,
                        Message = string.Format(tpl, myCtlFileUp.PostedFile.FileName)
                        //Message = string.Format(tpl, myCtlFileUp.PostedFile.FileName, myCtlFileUp.PostedFile.ContentLength)
                    });
                }
                else
                {
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.ERROR,
                        Title = Titulos.TituloAviso,
                        Message = Mensajes.MensajeArchivoIncorrecto
                    });
                }
                winDocumento.Hide();
            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.UploadClick" + ex);
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR,
                    Title = Titulos.TituloAviso,
                    Message = Mensajes.MensajeArchivoIncorrecto
                });
            }
        }

        private void UpdateEstadoInfome(Guid idArch,string _estado)
        {
            try
            {
                Informe objInforme = Informe.GetEditableRoot(idArch);
                objInforme.Estado = _estado;
                objInforme.Save();
             }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.UpdateEstadoInfome" + ex);
            }
        }
        /// <summary>
        /// Eliminar archivos de promotor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>     
        protected void btnDocUpEliminar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var id = Guid.Parse(e.ExtraParams["hddArchDelId"]);
                Archivo objArch = Archivo.GetEditableRoot(id, ModuloSession);

                DeleteFile(objArch.Ruta);
                
                objArch.Delete();
                objArch.Save();

                gpDocumentosLoad.GetStore().Reload();
            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.btnDocUpEliminar_Click" + ex);
            }

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="file"></param>
        private void DeleteFile(string file)
        {
            try
            {
            var path = Server.MapPath(file);
            if (System.IO.File.Exists(path))
                File.Delete(path);
             }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.DeleteFile" + ex);
            }
        }

        protected void btnComentarioInf_Click(object sender, DirectEventArgs e)
        {
            try
            {
                Guid id = Guid.Parse(e.ExtraParams["Id"]);
                Archivo objArch = Archivo.GetEditableRoot(id, ModuloSession);
                objArch.SubirNuevo = e.ExtraParams["Revizar"];
                objArch.Comentarios = e.ExtraParams["Comentarios"];
                //RegistrarLog(objArch.ToString()); Test try-catch
                objArch.Save();
                gpDocumentosLoad.GetStore().Reload();
                //X.Msg.Show(new MessageBoxConfig
                //{
                //    Buttons = MessageBox.Button.OK,
                //    Icon = MessageBox.Icon.INFO,
                //    Title = "Success",
                //    Message = string.Format("{0}<br/>", "Archivo asignado a revisión")
                //});
            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.btnComentarioInf_Click" + ex);
            }

        }
        protected void Notifica_Command(object sender, DirectEventArgs e)
        {
            try
            {
                var informe = Informe.GetEditableRoot(Guid.Parse(e.ExtraParams["Id"]));
                informe.PersonaId = GetSessionUsuario.PersonaId;
                informe.Notifica = Valores.Codigo_CHAR_Si;
                informe.Estado = Valores.Codigo_Estado_Inf_Notificado;
                informe.TablaId   = e.ExtraParams["FaseLicId"];
                informe.Save();
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO,
                    Title = Titulos.TituloAviso,
                    Message = "Informe notificado a Promotor"
                });
            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.Notifica_Command" + ex);
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR,
                    Title = Titulos.TituloAviso,
                    Message = "Ocurrio un error vuelva a intentar"
                });
            }
        }

        protected void btnGuardarRevizar_Click(object sender, DirectEventArgs e)
        {
            try
            {                
                //Crear Revision Fase y actualizar estado a director-subidirector
                string _stado = (e.ExtraParams["hddIdRol"] == Valores.Codigo_Rol_Director) ? Valores.Codigo_Estado_Inf_RevDir : Valores.Codigo_Estado_Inf_RevSubDir;
                RevisionFase objRevFase = RevisionFase.NewEditableRoot();
                objRevFase.Id = Guid.NewGuid();
                objRevFase.PersonaId = GetSessionUsuario.PersonaId;
                objRevFase.RevisorId = e.ExtraParams["ddfDirector"];
                objRevFase.Informe = e.ExtraParams["hddIdInforme"];
                objRevFase.Fecha = DateTime.Now;
                objRevFase.Aprobado = Valores.Codigo_CHAR_Revizar;
                objRevFase.TipoId = _stado;
                objRevFase.Save();
                UpdateEstadoInfome(Guid.Parse(e.ExtraParams["hddIdArchivo"]), _stado);
                gpDocumentosLoad.GetStore().Reload();
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.INFO,
                    Title = Titulos.TituloAviso,
                    Message = "Revisión creada"
                });                

            }
            catch (Exception ex)
            {
                RegistrarLog("wucInformeCorrecion.btnGuardarRevizar_Click" + ex);
            }
        }
        /// <summary>
        /// Bind de comentarios de archivo
        /// </summary>
        /// <param name="action"></param>
        /// <param name="extraParams"></param>
        /// <returns></returns>
        [DirectMethod(IDAlias = "wucPlusCmt")]
        public ComentariosLista BindDataComentarios(string action, Dictionary<string, object> extraParams)
        {
            try
            {
                string queryPrm = extraParams.ContainsKey("idArchivo") ? extraParams["idArchivo"].ToString() : "";
                if (queryPrm != "")
                {
                    return ComentariosLista.GetComentariosLista(queryPrm);
                }
                return null;
            }
            catch (Exception ex)
            {
                RegistrarLog("wucOtros.BindDataAddArchivos" + ex);
            }
            return null;

        }
    }
}